package proceso.carga.sector;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.StringTokenizer;

import modelo.poligonal.Poligonal;
import modelo.poligonal.Vertice;
/**
 * 
 * @author edgar
 * Leer todas las poligonales que estan en un archivo y que pertenecen a un sector o a una 
 * serie de terreno con las mismas caracteristicas
 *
 */
public class LectorPoligonal {
	private List<Poligonal> listaPoligonal = new ArrayList<Poligonal>();
	private String error;
	public List<Poligonal> getListaPoligonal() {
		return listaPoligonal;
	}
	public void setPoligonal(List<Poligonal> listaPoligonal) {
		this.listaPoligonal = listaPoligonal;
	}
	public String getError() {
		return error;
	}
	public void setError(String error) {
		this.error = error;
	}
	
	public boolean leer(String nombreArchivo){
		File arc;
		FileReader lectorArchivo;
		BufferedReader lectorBuffer;
		String linea = "";
		StringTokenizer tokens;
		Poligonal poligonal;
		int nroPuntos;
		int contLineas = 0;
		
		arc = new File(nombreArchivo);
		try {
			lectorArchivo = new FileReader(arc);
			lectorBuffer = new BufferedReader(lectorArchivo);
			while(lectorBuffer.ready()){
				linea = lectorBuffer.readLine();
				tokens = new StringTokenizer(linea,",");
				if(tokens.countTokens() !=2) {
					error = "Error en linea de inicio de poligonal " + linea;
					return false;
				}
				nroPuntos = Integer.parseInt(tokens.nextToken());
				poligonal = new Poligonal();
				poligonal.inicializarPoligonal();
				contLineas = nroPuntos;
				while(lectorBuffer.ready() && contLineas>0) {
					linea = lectorBuffer.readLine();
					tokens = new StringTokenizer(linea,",");
					contLineas--;
					Vertice vertice = new Vertice();
					vertice.setPoligonal(poligonal);
					vertice.setEste(Double.parseDouble(tokens.nextToken()));
					vertice.setNorte(Double.parseDouble(tokens.nextToken()));
					vertice.setNivel(Double.parseDouble(tokens.nextToken()));
					poligonal.agregarVertice(vertice);
				}
				poligonal.calcularMaxMin();
				listaPoligonal.add(poligonal);
			}
			if(contLineas != 0) {
				error =" El numero de lineas leidas en el ultimo poligono no es valido";
				return false;
			}
		} catch (FileNotFoundException e) {
			error = "El archivo no existe";
			e.printStackTrace();
			return false;
		} catch (IOException e) {
			error =" error en linea " + linea;
			e.printStackTrace();
			return false;
		}
		
		
		return true;
	}
	
}
